<?php
###########################
###########################
# Importante - Hacer mas chica esta clase
###########################
###########################
if(!defined("__OME"))die("<tt>TembeMoods Engine</tt>");
ini_set('display_errors', TRUE);
/* ///////////Developed By
  _   _       ___   __   _   _____        _     _   _____   __   _  
 | | | |     /   | |  \ | | /  ___/      | |   / / /  _  \ |  \ | | 
 | |_| |    / /| | |   \| | | |___       | |  / /  | | | | |   \| | 
 |  _  |   / / | | | |\   | \___  \      | | / /   | | | | | |\   | 
 | | | |  / /  | | | | \  |  ___| |      | |/ /    | |_| | | | \  | 
 |_| |_| /_/   |_| |_|  \_| /_____/      |___/     \_____/ |_|  \_| 
*/
//  //     Manejador de Base de Datos para MySQL
///////////////////////////////////////////////////////////////////
//  //       Autor : Hans Von Herrera Ortega
//  //     Versión : 3.6
//  //      Bugs a : seguridad.php@gmail.com
class H_MYSQL {
	private $conexion;
	private $resultado;
	private $conectado;
	private $ultima_fila;
	public $depurador=0;
	public $Merr=0;
	public $with_htmlentities=1;
	private $sql;
	private $respuesta;
	private $filas;
	static $instancias;
	function __construct() {
		if(!H_MYSQL::$instancias++){ 
			$this->conexion=@mysql_connect(H_MYSQL_HOST,H_MYSQL_USUARIO,H_MYSQL_CLAVE);
			if(@mysql_select_db(H_MYSQL_BD,$this->conexion)){
				$this->conectado=true;
			}else{
				$this->errores(mysql_errno());
			}
		}else{
			die("Hay mas de una instancia del objeto <b>'H_MYSQL'</b>.");
		}
	}
	function __destruct() {
 		if(!empty($this->conexion)){
			mysql_close($this->conexion);
			unset($this->conexion);
	}
	}
	function fila($sql,$depurar=0){
		return $this->iconsulta($sql,'fila',$depurar);
	}
	function consulta($sql,$depurar=0){
		return $this->iconsulta($sql,'consulta',$depurar);
	}
	function iconsulta($sql,$tipo,$depurar){
		if($this->conectado && $sql){
			$this->sql=$sql;
			if($this->resultado = mysql_query($sql,$this->conexion)){
				unset($this->respuesta);
				if($tipo=='fila'){
					$this->respuesta[0] = @mysql_fetch_object ($this->resultado);
					$this->ultima_fila = $this->respuesta[0];
				}else if($tipo=='consulta'){
					$i=0;
					if($this->resultado!='1'){
						while($fila = mysql_fetch_object ($this->resultado)){
							$this->respuesta[$i]=$fila;
							$i++;
							if($i>1000) 
							die("<b>FATAL:</b>  Su consulta genera mas de mil registros.");
						}
						if(!empty($this->respuesta))
						$this->ultima_fila=$this->respuesta[$i-1];
					}
				}

				if($depurar || $this->depurador) $this->depurar();

				if($this->resultado!='1') mysql_free_result($this->resultado);

				if(!empty($this->respuesta[0]) && $tipo=='fila' && $this->resultado!='1'){
					return $this->respuesta[0];
				}elseif(!empty($this->respuesta) && $this->resultado!='1'){
					return $this->respuesta;

				}else{

					return true;
				}
			}else{
				$this->errores(mysql_errno());
			}
		}
	}
	function depurar(){
		if($this->conectado){
			if($this->resultado){
				$col=@mysql_num_fields($this->resultado);
				$faffected=mysql_affected_rows();
				echo "<table width=100% align=center border=1 rules=all style='min-width:500px;font:normal 12px Arial,Verdana,Pursia'><tr><td colspan=".$col." style='padding:20px 0 0 20px' >
  <h2 style=background:#CCC >$this->sql</h2>
  ".(($col)?"Columnas totales : $col<br>":"")."
  Filas afectadas : ".$faffected."
</td></tr>";
				if($faffected){
					echo "<tr bgcolor=#000000>";
					$i=0;
					foreach($this->ultima_fila as $k=>$v){
						$info_col=get_object_vars(mysql_fetch_field($this->resultado,$i));
						echo "<th align='center' style='color:#".(($info_col['primary_key'])?"FF0":"FFF")."'>[$k] <font size='-1' color='#999999'>$info_col[type](".mysql_field_len($this->resultado,$i).")<br>max len : $info_col[max_length]</font></th>";
						$i++;
					}
			
				 echo '</tr>';
					$i=0;
					foreach($this->respuesta as $v){
						echo "<tr bgcolor='#".(($i%2)?'FFFFFF':'CCCCCC')."'>";
						foreach(get_object_vars($v) as $v){
							echo "<td align='center'>".(($this->with_htmlentities)?htmlentities($v):$v)."</td>";
						}
						echo "</tr>";
						$i++;
					}
				}
			echo ' </table>';
			}
		}
	}
	function errores($n){
if(!empty($this->Merr)){
		switch($n){
			case 2005:
				$e="No se puede conectar al host: <b>'".H_MYSQL_HOST."'</b>";
			break;
			case 1045:
				$e="Acceso denegado a : <b>'".H_MYSQL_USUARIO."'@'".H_MYSQL_HOST."'</b> (USO CLAVE ".((H_MYSQL_CLAVE)?"SI":"NO").")";
			break;
			case 1064:
			$ex=explode("'",mysql_error(),2);
			$e="Se detecto un error de sintaxis en la consulta al usar : <font color='#CC0000'>'".str_replace("at line","</font> en la linea",$ex[1]);
			break;
			case 1049:
				$e="No se puede seleccionar la base de datos: <b>'".H_MYSQL_BD."'</b>";
			break;
			case 1146:
				$ex=explode("'",mysql_error(),2);
				$e="La tabla : <font color='#CC0000'>'".str_replace("doesn't exist","</font> no existe",$ex[1]);
			break;
		default:
			$e=mysql_error();
		break;
		}
		if(!empty($n))echo($e.". Error no:".mysql_errno());
	}else{
return false;
}

	}
}
?>